package Set_and_Dict;
import java.util.*;

/*
同构字符串
给定两个字符串s和t，判断它们是否是同构的。
如果s中的字符可以按某种映射关系替换得到t，那么这两个字符串是同构的。
每个出现的字符都应当映射到另一个字符，同时不改变字符的顺序。不同字符不能映射到同一个字符上，相同字符只能映射到同一个字符上，字符可以映射到自己本身。

示例 1:
输入：s = "egg", t = "add"
输出：true
示例 2：
输入：s = "foo", t = "bar"
输出：false
示例 3：
输入：s = "paper", t = "title"
输出：true

作者：LeetCode
链接：https://leetcode.cn/leetbook/read/all-about-lockup-table/f1f86/
 */

public class _23同构字符串 {
    public static void main(String[] args) {

    }

    //HashMap 字典记录映射  HashSet判断映射对象是否重复
    public boolean isIsomorphic(String s, String t) {
        HashMap<Character, Character> dict = new HashMap<>();
        HashSet<Character> seen = new HashSet<>();
        for (int i = 0; i < s.length(); i++) {
            //如果该字符不在dict中
            if (!dict.containsKey(s.charAt(i))) {
                //判断映射是否存在于seen中
                if (!seen.contains(t.charAt(i))) {
                    dict.put(s.charAt(i), t.charAt(i));
                    seen.add(t.charAt(i));
                }else {
                    return false;
                }
            }else {
                //如果该字符在dict中
                //判断映射是否一样
                if(dict.get(s.charAt(i)) != t.charAt(i))
                    return false;
            }
        }
        return true;
    }

}
